#include <iostream>
#include <string>
#include "typeinfo.h"
#include "stdlib.h"
#include "list.h"

using namespace std;

/*
 *  查找单链表中最大的值做标记，并返回最大值的节点
 *  @param   ListA  SingleList 类型的地址
 *  @param   MaxPos  int*
 *
 *  @return  LNode 类型
 *
 */
 LNode *findMaxElem(SingleList &ListA, int *maxPos){
     LNode *pNode, *maxNode;
     int flag =1;
     pNode = ListA.getHead();

     //对头指针进行判断处理
     if(pNode == NULL){
         return NULL ;
     }else{
         //先标记第一个节点为最大值
         maxNode = pNode;
         flag =1;
         *maxPos =flag;
     }
     while(pNode!=NULL){
         //重头遍历单链表
         if(pNode->link != NULL){
             flag++;
             pNode=pNode->link; 
            //如果发现当前节点比标记的最大值大，则标记当前节点为最大值的节点
             if(maxNode->data < pNode->data){
                 maxNode = pNode;
                 *maxPos = flag;
             }
         }else{
             pNode = NULL;
         }
     }
     return maxNode;
}

int main(){

    cout << "请输入若干个随机数字，每输入一个按Enter键，最后输入任意字母表示结束.\n";
    SingleList ListOne;
    int n;

    while(cin >>n){
        if(typeid(n) != typeid(int)){
            break;
        }
        LNode *node = new LNode(n);
        ListOne.insert(node, ListOne.getLen());
    }
    //输出输入结果
    cout << "链表一:";
    ListOne.output();
    cout <<"链表长度：" <<ListOne.getLen()<<"\n";

    //查找最大节点
    LNode *maxNode;
    int maxPos=0;
    maxNode = findMaxElem(ListOne, &maxPos);

    if(maxNode != NULL){
        cout << "最大节点为第"<<maxPos<<"个，值为"<<maxNode->data <<"\n";
    }else{
        cout <<"找不到最大值.";
    }

}
